/**
 * 键盘事件管理
 */
(function () {

    var KeyEvent = function () {
    }
    /**
     * 按键与ascii码对应表
     */
    KeyEvent.__keyCodeMap = {
        VK_ESCAPE: 27, // ESC键
        VK_RETURN: 13, // 回车键
        VK_TAB: 9, // TAB键
        VK_CAPITAL: 20, // Caps Lock键
        VK_SHIFT: 16, // Shift键
        VK_CONTROL: 17, // Ctrl键
        VK_MENU: 18, // Alt键
        VK_SPACE: 32, // 空格键
        VK_BACK: 8, // 退格键
        VK_LWIN: 91, // 左徽标键
        VK_RWIN: 92, // 右徽标键
        K_APPS: 93, // 鼠标右键快捷键

        VK_INSERT: 45, // Insert键
        VK_HOME: 36, // Home键
        VK_PRIOR: 33, // Page Up
        VK_NEXT: 34, // Page Down
        VK_END: 35, // End键
        VK_DELETE: 46, // Delete键
        VK_LEFT: 37, // 方向键(←)
        VK_UP: 38, // 方向键(↑)
        VK_RIGHT: 39, // 方向键(→)
        VK_DOWN: 40, // 方向键(↓)

        VK_F1: 112, // F1键
        VK_F2: 113, // F2键
        VK_F3: 114, // F3键
        VK_F4: 115, // F4键
        VK_F5: 116, // F5键
        VK_F6: 117, // F6键
        VK_F7: 118, // F7键
        VK_F8: 119, // F8键
        VK_F9: 120, // F9键
        VK_F10: 121, // F10键
        VK_F11: 122, // F11键
        VK_F12: 123, // F12键

        VK_NUMLOCK: 144, // Num Lock键
        VK_NUMPAD0: 96, // 小键盘0
        VK_NUMPAD1: 97, // 小键盘1
        VK_NUMPAD2: 98, // 小键盘2
        VK_NUMPAD3: 99, // 小键盘3
        VK_NUMPAD4: 100, // 小键盘4
        VK_NUMPAD5: 101, // 小键盘5
        VK_NUMPAD6: 102, // 小键盘6
        VK_NUMPAD7: 103, // 小键盘7
        VK_NUMPAD8: 104, // 小键盘8
        VK_NUMPAD9: 105, // 小键盘9
        VK_DECIMAL: 110, // 小键盘.
        VK_MULTIPLY: 106, // 小键盘*
        VK_PLUS: 107, // 小键盘+
        VK_SUBTRACT: 109, // 小键盘-
        VK_DIVIDE: 111, // 小键盘/
        VK_PAUSE: 19, // Pause Break键
        VK_SCROLL: 145, // Scroll Lock键

        A: 65, // A键
        B: 66, // B键
        C: 67, // C键
        D: 68, // D键
        E: 69, // E键
        F: 70, // F键
        G: 71, // G键
        H: 72, // H键
        I: 73, // I键
        J: 74, // J键
        K: 75, // K键
        L: 76, // L键
        M: 77, // M键
        N: 78, // N键
        O: 79, // O键
        P: 80, // P键
        Q: 81, // Q键
        R: 82, // R键
        S: 83, // S键
        T: 84, // T键
        U: 85, // U键
        V: 86, // V键
        W: 87, // W键
        X: 88, // X键
        Y: 89, // Y键
        Z: 90, // Z键

        NUMPAD0: 48, // 0键
        NUMPAD1: 49, // 1键
        NUMPAD2: 50, // 2键
        NUMPAD3: 51, // 3键
        NUMPAD4: 52, // 4键
        NUMPAD5: 53, // 5键
        NUMPAD6: 54, // 6键
        NUMPAD7: 55, // 7键
        NUMPAD8: 56, // 8键
        NUMPAD9: 57 // 9键
    }
    /**
     * 按键状态表
     */
    KeyEvent.__keyDownMap = {};

    /**
     * 添加按键事件监听
     */
    KeyEvent.addListener = function () {
        document.onkeydown = function (e) {
            var e = e || event, code = e.keyCode || e.which;
            KeyEvent.__keyDownMap[code] = true;
        }

        document.onkeyup = function (e) {
            var e = e || event, code = e.keyCode || e.which;
            KeyEvent.__keyDownMap[code] = false;
        }
    }
    /**
     * 移除按键事件监听
     */
    KeyEvent.removeListener = function () {
        document.onkeydown = null;
        document.onkeyup = null;
    }
    /**
     * 检查某个按键是否被按下
     * @param {String} key
     */
    KeyEvent.check = function (key) {
        var code = KeyEvent.__keyCodeMap[key];
        return !!KeyEvent.__keyDownMap[code];
    }

    my.KeyEvent = KeyEvent;
})();
